package main

import "fmt"

func variable() {
	// 声明
	var a = 10
	var b int
	b = 15
	const c = 20
	fmt.Println(a, b, c)
	// 多变量赋值
	d, e, f := 30, 20, 10
	fmt.Println(d, e, f)
	// 值交换
	a, b = b, a
	fmt.Println(a, b)
}

func conditional() {
	// 条件判断
	var age int = 23
	if age == 25 {
		fmt.Println("true")
	} else if age < 25 {
		fmt.Println("too small")
	} else {
		fmt.Println("too big")
	}
}

func array() {
	// 数组初始化
	var arr1 = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
	fmt.Println(arr1)

	//声明一个长度不确定的数组
	var arr2 = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
	fmt.Println(arr2)

	//通过下标来初始化数组元素,其中初始化了下标1和下标4的值，其他默认0
	var arr3=[5]float32{1:1000,4:3000}
	fmt.Println(arr3)
}

func pointer() {
	var num int = 1
	// 类型前加 * 表示这是指针类型，指针类型的初始值为nil ,和其他语言的NUll,None一样
	var ptr *int
	fmt.Println("ptr指针初始值：", ptr)
	// &表示获取num 变量的内存地址。 因为ptr 是指针，指向的是内存地址，所以需要赋值操作的是内存地址
	ptr = &num
	fmt.Println("ptr 指针的值：", ptr)
	//*取指针内存地址所指向的值
	fmt.Println("*ptr 指针的值：", *ptr)
	*ptr = 2
	fmt.Println("*ptr 指针更新后的值：", *ptr)
	fmt.Println("原变量num的值：", num)
	fmt.Println("ptr 指针更新后的值：", ptr)
}

func main() {
	variable()
	pointer()
	array()
}

